<!DOCTYPE HTML>
<html>
<head>
<title>FileCopyDir | AutoHotkey</title>
<meta name="description" content="The FileCopyDir command copies a folder along with all its sub-folders and files (similar to xcopy)." />
<meta name="ahk:equiv-v2" content="lib/DirCopy.htm" />
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<link href="../static/theme.css" rel="stylesheet" type="text/css" />
<script src="../static/content.js" type="text/javascript"></script>
</head>
<body>

<h1>FileCopyDir</h1>

<p>复制文件夹及其所有子文件夹和文件(类似于 xcopy).</p>

<pre class="Syntax"><span class="func">FileCopyDir</span>, Source, Dest <span class="optional">, Overwrite</span></pre>
<h2 id="Parameters">参数</h2>
<dl>

  <dt>Source</dt>
  <dd>
    <p>源目录的名称(不含末尾的反斜杠), 如果未指定绝对路径, 则假定在 <a href="../Variables.htm#WorkingDir">%A_WorkingDir%</a> 中. 例如: C:\My Folder</p>
    <p><span class="ver">[v1.1.34+]:</span> 如果操作系统支持, <em>Source</em> 也可以是 zip 文件的路径, 将其内容复制到目标目录. 这已经被证实在 Windows 7 和 Windows 11 上可以工作.</p>
  </dd>

  <dt>Dest</dt>
  <dd><p>目标目录的名称(不含末尾的反斜杠), 如果未指定绝对路径, 则假定在 <a href="../Variables.htm#WorkingDir">%A_WorkingDir%</a> 中. 例如: C:\Copy of My Folder</p></dd>

  <dt>Overwrite</dt>
  <dd>
      <p>此参数确定是否覆盖已存在的文件. 如果省略, 它默认为 0(false). 指定以下值之一:</p>
      <p><strong>0</strong>(false): 不覆盖现有的文件. 如果已经存在以 <em>Dest</em> 为名称的文件或目录, 则操作会失败并且没有任何效果.</p>
      <p><strong>1</strong>(true): 覆盖现在的文件. 但是, 不会删除在 <em>Dest</em> 中没有被 <em>Source</em> 目录中文件覆盖的其他子目录或文件.</p>
      <p>此参数可以为<a href="../Variables.htm#Expressions">表达式</a>, 甚至是计算结果为真或假的表达式(因为真和假内部分别保存为 1 和 0).</p>
  </dd>

</dl>

<h2 id="Error_Handling">错误处理</h2>
<p><span class="ver">[v1.1.04+]</span>: 此命令失败时会抛出异常. 想了解更多信息, 请参阅<a href="Catch.htm#RuntimeErrors">运行时错误</a>.</p>
<p>如果遇到问题则 <a href="../misc/ErrorLevel.htm">ErrorLevel</a> 被置为 1, 否则为 0. 但是, 如果源目录包含任何由 <em>PageName.htm</em> 文件和名称为 <em>PageName_files</em> 的相应目录组成的网页, 那么即使复制成功也可能提示错误.</p>
<h2 id="Remarks">备注</h2>
<p>如果目标目录结构不存在, 则可行时会进行创建.</p>
<p>由于操作会递归复制文件夹及其所有子文件夹和文件, 所以复制某个文件夹到目标内部的什么位置是不确定的. 要变通解决此问题, 首先把它复制到目标外面, 然后使用 <a href="FileMoveDir.htm">FileMoveDir</a> 把这个副本移动到目标位置.</p>
<p>FileCopyDir 只复制单个文件夹. 若要复制文件夹中的内容(它的所有文件和子文件夹, 而不复制文件夹本身), 请参照 <a href="FileCopy.htm">FileCopy</a> 的示例部分.</p>
<h2 id="Related">相关</h2>
<p><a href="FileMoveDir.htm">FileMoveDir</a>, <a href="FileCopy.htm">FileCopy</a>, <a href="FileMove.htm">FileMove</a>, <a href="FileDelete.htm">FileDelete</a>, <a href="LoopFile.htm">文件循环</a>, <a href="FileSelectFolder.htm">FileSelectFolder</a>, <a href="SplitPath.htm">SplitPath</a></p>
<h2 id="Examples">示例</h2>
<div class="ex" id="ExBasic">
<p><a class="ex_number" href="#ExBasic"></a> 将一个目录复制到一个新的位置.</p>
<pre>FileCopyDir, C:\My Folder, C:\Copy of My Folder
</div>

<div class="ex" id="ExDirSelect">
<p><a class="ex_number" href="#ExDirSelect"></a> 提示用户复制一个文件夹.</p>
<pre>FileSelectFolder, SourceFolder, , 3, Select the folder to copy
if SourceFolder =
    return
<em>; 否则继续.</em>
FileSelectFolder, TargetFolder, , 3, Select the folder IN WHICH to create the duplicate folder.
if TargetFolder =
    return
<em>; 否则继续.</em>
MsgBox, 4, , A copy of the folder "%SourceFolder%" will be put into "%TargetFolder%".  Continue?
IfMsgBox, No
    return
SplitPath, SourceFolder, SourceFolderName  <em>; 仅从它的完整路径中提取文件夹名称.</em>
FileCopyDir, %SourceFolder%, %TargetFolder%\%SourceFolderName%
if ErrorLevel
    MsgBox The folder could not be copied, perhaps because a folder of that name already exists in "%TargetFolder%".
return</pre>
</div>

</body>
</html>